# coding = utf-8
import os
import shutil
import random
import cv2
'''
=====================
    定义一些常量
=====================

'''
# r'' 表示“Raw字符串”，对于转译字符，它也不会进行转译
UNLABEL_PATH = r'static\images\unlabel'
QIPAO_PATH = r'static\images\qipao'
OTHER_PATH = r'static\images\other'
MAX = 9


'''
=====================
    一些支持函数
=====================

'''
# 随机返回一个路径下的n个文件的路径
def random_get_file_paths(path, n):
    filePaths = []
    # 获取这个路径下的所有的文件名
    fileNames = os.listdir(path)
    if len(fileNames) == 0:
        print('无法从' + path + '中获取文件！')
    elif n <= 0:
        print('请输入大于0的数量！')
    else :
        # 随机返回n个名称，若len(fileName) < n，则返回len(fileName)个
        while len(fileNames) > 0 and n > 0:
            name = random.choice(fileNames)
            fileNames.remove(name)
            filePaths.append(path + '\\' + name)
            n -= 1
    # 返回这些路径
    return filePaths

# 将指定的文件移动到指定路径下
def move_file(file, path):
    flag = 'fail'
    # 先检查文件与目标路径是否存在
    if os.path.exists(file):
        if os.path.exists(path):
            shutil.move(file, path)
            flag = 'success'
        else:
            print('指定的路径' + path + '不存在……')
    else:
        print('不存在文件' + file)
    return flag

# 返回一个路径下的文件数量
def get_file_count(path):
    files = os.listdir(path)
    return len(files)

'''
========================
        API函数
========================

'''
# API函数 --随机返回（最多MAX个）未标记的图片的地址
def get_img_paths():
    img_paths = random_get_file_paths(UNLABEL_PATH, MAX)
    return img_paths

# API函数 --将图片打上“qipao”标记->移动到qipao文件夹下
def label_qipao(img_path):
    move_file(img_path, QIPAO_PATH)

# API函数 --将图片打上“other”标记->移动到other文件夹下
def label_other(img_path):
    move_file(img_path, OTHER_PATH)

# API函数 --获取未标注的图片的数量
def get_unlabel_img_count():
    return get_file_count(UNLABEL_PATH)

# API函数 --获取标注为“qipao”的图片数量
def get_qipao_img_count():
    return get_file_count(QIPAO_PATH)

# API函数 --获取标注为“other”的图片数量
def get_other_img_count():
    return get_file_count(OTHER_PATH)
